﻿using System;
using System.IO;
using System.Windows.Forms;
using System.Data;

namespace ContagemFieiras
{
    class FileMts
    {
        private readonly DataTable _dtMetragem;

        public FileMts()
        {
            if (string.IsNullOrEmpty(Properties.Settings.Default.FileMts) ||
                !File.Exists(Properties.Settings.Default.FileMts))
                ask4File();

            if (!string.IsNullOrEmpty(Properties.Settings.Default.FileMts) &&
                File.Exists(Properties.Settings.Default.FileMts))
            {
                try
                {
                    _dtMetragem = new DataTable();
                    _dtMetragem.Clear();

                    string[] linhas = File.ReadAllLines(Properties.Settings.Default.FileMts);
                    //Colunas
                    String[] cols = linhas[0].Split(';');
                    foreach (String col in cols) _dtMetragem.Columns.Add(col);

                    //Linhas
                    _dtMetragem.BeginLoadData();
                    for (int l = 1; l < linhas.Length; l++)
                    {
                        DataRow row = _dtMetragem.NewRow();
                        row.ItemArray = linhas[l].Split(';');
                        _dtMetragem.Rows.Add(row);
                    }
                    _dtMetragem.EndLoadData();
                }
                catch (Exception ex)
                { MessageBox.Show(ex.Message); }
            }
        }

        public decimal calculaMts(decimal unidades, decimal metros, string artigo)
        {
            decimal i = 0;
            if (_dtMetragem != null)
            {
                DataView dvMetragem = _dtMetragem.DefaultView;
                dvMetragem.RowFilter = string.Format("[coluna1] Like '%{0}%'", artigo);

                if (dvMetragem.Count > 0)
                {
                    decimal y = decimal.Parse(dvMetragem[0][2].ToString()) * decimal.Parse(dvMetragem[0][1].ToString()) * unidades;
                    if (y == 0) i = 0;
                    else
                    {
                        i = ((metros * decimal.Parse(dvMetragem[0][1].ToString())) /
                             (decimal.Parse(dvMetragem[0][2].ToString()) *
                              decimal.Parse(dvMetragem[0][1].ToString()))) *
                            unidades;
                    }
                }
            }
            return i;
        }
        private static void ask4File()
        {
            MessageBox.Show("Seleccione a seguir por favor a localização do ficheiro", "Ficheiro Metragens em Falta",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
            OpenFileDialog txtFile = new OpenFileDialog();
            txtFile.Filter = "Ficheiro de Texto (*.txt)|*.txt|Vírgula Flutuante (*.csv)|*.csv";

            if (txtFile.ShowDialog() == DialogResult.OK)
            {
                Properties.Settings.Default.FileMts = txtFile.FileName;
                Properties.Settings.Default.Save();
            }
        }
    }
}
